package com.peng.crm.commons.utils;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * MD5 是一种加密算法，可以将任意的字符串转换为固定长度32位字符串，不可逆加密
 * 现在可以破解了      ！！！！！(暴力破解)
 *
 *
 * 盐加密 ：源密码 + 盐(随机生成的字符串)   --> 再进行MD5加密    -->可以多次加密
 *
 */
public class MD5Util {

    /**
     * 获取MD5加密数字
     *
     * @param source    源密码
     * @return          加密后
     */
    public static String getMD5(String source){
        try {
            //获取MD5对象
            MessageDigest md5 = MessageDigest.getInstance("md5");
            //
            md5.update(source.getBytes());
            //将MD5字符串转换为10进制的数字  然后    再转成16 进制的字符串
            return new BigInteger(1,md5.digest()).toString(16);

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String str = "1317325584";
        String md5 = getMD5(str);
        //加密一次MD5
        System.out.println(md5);
        //可以多次加密
        System.out.println(getMD5(getMD5(md5)));

        //也可以盐加密
        System.out.println(getMD5(md5+"任意字符串"));
    }
}
